CAS的认证过程就是通过执行以下几个相互关联的组件组成
- PrincipalNameTransformer
将输入到登录表单的用户标识字符串转换成一个临时的主体名称,然后该主体名称将被指定的Authentication Handler进行验证- AuthenticationManager
AuthenticationManager作为认证子系统的一个入口,其可以接收一个或多个凭据,并调用配置文件中指定的AuthenticationHandler组件对接收到的凭证进行验证。其存储着每次进行验证的结果和确定有效的安全策略- AuthenticationHandler
验证单个凭据并返回认证后的三种可能的结果:成功,失败,未尝试- PrincipalResolver
将认证凭据中的信息转换成一个安全的主体,通常主题中包含一些额外的元数据属性(例如:用户的细节信息如:隶属关系,组关系,邮件,昵称)- AuthenticationMetaDataPopulator
针对认证成功事件设置任意任意元数据的策略组件,该组件通常用于设置特定协议的数据
针对以上组件若未作特殊声明,均在deployerConfigContext.xml中配置
认证管理器
CAS附带了一个简单却又十分灵活的认证管理器PolicyBasedAuthenticationManager,该认证管理器应该可以满足绝大数的需求。PolicyBasedAuthenticationManager认证管理器按照以下步奏进行执行:对于每个给定的凭据将做以下操作。
- 1.遍历所有已配置的认证处理器
- 2.如果有一个处理器支持该凭据处理,则尝试对该凭据进行认证
- 3.若认证成功则将该凭据解析为一个主体
3.1 检测对该凭据进行认证的处理器是否配置了对应的解析器
3.2 若有对应解析器则将凭据解析成主体
3.3 若没有找到对应的解析器,则使用处理器对该凭据进行解析 - 4.检测安全策略是否满足
- 5.如果满足安全策略则立即返回
- 6.若不满足则继续步骤2
- 若所有的凭证按照给定的安全策略进行检测但都不满足则抛出AuthenticationException
认证处理器
认证处理器就是具体存储认证信息的地方可以把它理解成为数据库,CAS附带支持与其他常见认证系统对接,以下列出了CAS支持的所有认证技术
- Database
- JAAS
- LDAP
- Legacy
- OAuth 1.0/2.0, OpenID
- RADIUS
- SPNEGO (Windows)
- Trusted (REMOTE_USER)
- X.509 (client SSL certificate)
- Remote Address
参数提取器
参数提取器负责检查所有通过附带在http请求后面的参数,这些参数用于描述跳转过来的客户端。每个不同的协议,对应了相应的参数提取器,每个参数提取器将创建对应的“webApplicationService”实体,该实体包含了参数提取器提取的结果,参数提取器定义在src/main/webapp/WEB-INF/spring-configuration/argumentExtractorsConfiguration.xml配置文件中